--=============================================================================--
-- Yuns的垃圾游戏史 第一篇 ：
--
-- 简单解释一下：那是七年之前的时候，那时候的我还没有学过什么程序语言，也就高中时候
-- 信息课上接触的一点VB的皮毛，在一片荒野之中，找到了一个好玩具：EDGameMaker，故事
-- 从此开始……
-- 简单看了官方的Demo之后，我就以极度粗野的风格写出了几个东西，在现在看了，简直是一个
-- 离谱
-- 这个时间节点的我，其实不知道这是Lua，不知道函数什么的，就是楞写！！！

-- 第一个，试水作：飞机游戏，总体是能运行的，而且是仅能运行！
--=============================================================================--


--=============================================================================--
-- ■ 加载运行库
--=============================================================================--
require "Lib/engine"


--===============================================================================
-- ■ 初始化屏幕
--===============================================================================
引擎  = D2D_引擎.创建("战网--*****",60,800,600,true,true,"Dat/星.ico")

文字=D2D_文字.创建(楷体,40,false,false,false)

游戏进度=0

背景图片1=引擎:载入图片("Dat/2.jpg")
主角图片=引擎:载入图片("Dat/主角.png")
敌人图片1=引擎:载入图片("Dat/图片3.png")
敌人图片2=引擎:载入图片("Dat/图片2.png")
敌人图片3=引擎:载入图片("Dat/enemy4.png")
小boss图片=引擎:载入图片("Dat/图片1.png")
子弹图片1=引擎:载入图片("Dat/子弹1.png")
子弹图片2=引擎:载入图片("Dat/子弹2.png")
大招图片=引擎:载入图片("Dat/bomb.png")
进度图片1=引擎:载入图片("Dat/进度.png")
进度图片2=引擎:载入图片("Dat/无标题.png")
小王图片1=引擎:载入图片("Dat/enemy2.png")
小王图片2=引擎:载入图片("Dat/enemy1.png")

背景精灵1=D2D_精灵.创建(背景图片1,0,0,800,600)
背景参数y=0
背景参数x=0

主角动画=D2D_动画.创建(主角图片,4,4,0,0,100,100)
主角动画:播放()
主角动画:置中心点(50,50)
主角坐标x=400
主角坐标y=400
血=100
主角包围盒=D2D_包围盒.创建(主角坐标x-50,主角坐标y-50,50,50)

子弹精灵1=D2D_精灵.创建(子弹图片1,0,0,22,22)
子弹精灵1:置中心点(11,11)
子弹坐标x=0
子弹坐标y=0

大招精灵=D2D_精灵.创建(大招图片,0,0,32,32)
鼠标x,鼠标y=引擎.取鼠标坐标()
大招精灵:置中心点(16,16)

进度=0
进度精灵1=D2D_精灵.创建(进度图片1,0,0,100,10)
进度精灵2=D2D_精灵.创建(进度图片2,0,0,100,10)

血精灵1=D2D_精灵.创建(进度图片1,0,0,100,10)
血精灵2=D2D_精灵.创建(进度图片2,0,0,100,10)

敌人数量1=15
敌人1={}
for n = 1,敌人数量1  do
      敌人1[n]=
      {
	     精灵=D2D_精灵.创建(敌人图片1,0,0,100,100),
	     x=引擎:取随机整数(50,750),
           y=引擎:取随机整数(50,100),
           包围盒=D2D_包围盒.创建(50,50,50,50),
	     血=3,
	     状态=="活"
      }
敌人1[n].精灵:置中心点(50,50)
end

敌人数量2=10
敌人2={}
for n = 1,敌人数量2 do
      敌人2[n]=
      {
	     精灵=D2D_精灵.创建(敌人图片2,0,0,100,100),
	     x=引擎:取随机整数(50,750),
           y=引擎:取随机整数(50,100),
           包围盒=D2D_包围盒.创建(50,50,50,50),
	     血=6,
	     子弹=D2D_精灵.创建(子弹图片2,0,0,22,22),
	     状态=="活"
      }
敌人2[n].精灵:置中心点(50,50)
敌人2[n].子弹:置中心点(11,11)
敌人2[n].子弹x=0
敌人2[n].子弹y=0
end

敌人数量3=3
敌人3={}
for n = 1,敌人数量1  do
      敌人3[n]=
      {
	     精灵=D2D_精灵.创建(小boss图片,0,0,200,200),
	     x=引擎:取随机整数(100,700),
           y=引擎:取随机整数(100,150),
           包围盒=D2D_包围盒.创建(50,50,150,150),
	     血=20,
	     子弹=D2D_精灵.创建(大招图片,0,0,32,32),
	     子弹包围盒=D2D_包围盒.创建(50,50,80,80),
	     状态=="活"
      }
敌人3[n].精灵:置中心点(100,100)
敌人3[n].子弹:置中心点(16,16)
敌人3[n].子弹x=0
敌人3[n].子弹y=0
end

大王动画1=D2D_动画.创建(敌人图片3,8,4,0,0,64,64)
大王动画1:播放()
大王动画1:置中心点(32,32)
大王子弹=D2D_精灵.创建(大招图片,0,0,32,32)
大王子弹:置中心点(16,16)
大王子弹包围盒=D2D_包围盒.创建(50,50,100,100)
大王子弹x=0
大王子弹y=0
大王血=500
大王血1=D2D_精灵.创建(进度图片1,0,0,100,10)
大王血2=D2D_精灵.创建(进度图片2,0,0,100,10)
大王包围盒=D2D_包围盒.创建(50,50,100,100)
大王x=-250
大王y=150

小王动画1=D2D_动画.创建(小王图片1,8,4,0,0,64,64)
小王动画1:播放()
小王动画1:置中心点(32,32)
小王子弹1=D2D_精灵.创建(子弹图片2,0,0,22,22)
小王子弹1x=0
小王子弹1y=0
小王血1=50
小王包围盒1=D2D_包围盒.创建(50,50,100,100)
小王1x=0
小王1y=0
小王1状态="活"

小王动画2=D2D_动画.创建(小王图片2,8,4,0,0,64,64)
小王动画2:播放()
小王动画2:置中心点(32,32)
小王子弹2=D2D_精灵.创建(子弹图片2,0,0,22,22)
小王子弹2x=0
小王子弹2y=0
小王血2=50
小王包围盒2=D2D_包围盒.创建(50,50,64,64)
小王2x=0
小王2y=0
小王2状态="活"

--===============================================================================
-- ■ 屏幕逻辑()
--===============================================================================
function 屏幕逻辑 ()

时间=引擎.取最后帧时间()
主角动画:更新(时间)
大王动画1:更新(时间)
小王动画1:更新(时间)
小王动画2:更新(时间)

背景参数y=背景参数y-1

if(引擎:取按键事件(键_键盘左)and(主角坐标x>50))then
    主角坐标x=主角坐标x-5
    背景参数x=背景参数x-1
end
if(引擎:取按键事件(键_键盘右)and(主角坐标x<750))then
    主角坐标x=主角坐标x+5
    背景参数x=背景参数x+1
end
if(引擎:取按键事件(键_键盘上)and(主角坐标y>50))then
    主角坐标y=主角坐标y-5
end
if(引擎:取按键事件(键_键盘下)and(主角坐标y<550))then
     主角坐标y=主角坐标y+5
end

if(进度<3000)then
    进度=进度+1
end

	return false
end




--===============================================================================
-- ■ 屏幕渲染()
--===============================================================================
function 屏幕渲染 ()
	渲染开始()
	清屏(ARGB(255,128,128,128))
	
	背景精灵1:置显示区域(背景参数x,背景参数y,800,600)
	背景精灵1:显示()
	
	进度精灵2:显示(32,0)
	进度精灵1:置颜色(颜色_紫)
	进度精灵1:显示_高级(32,0,0,进度/3000,1)
	
	主角动画:显示(主角坐标x,主角坐标y)
	血精灵2:显示(40,570)
	血精灵1:显示_高级(40,570,0,血/100,1)
	文字:置颜色(颜色_红)
	文字:显示(0,560,"命")
	主角包围盒:置位置(主角坐标x-25,主角坐标y-25)
	
	if(血<=0)then
	    血精灵1:置颜色(ARGB(0,0,0,0))
	    主角动画:置颜色(ARGB(0,0,0,0))
	    文字:显示(200,250,"游戏结束.按回车键重来")
	    if(引擎:取按键事件(键_回车))then
	          进度=0
	          血=100
		    血精灵1:置颜色(ARGB(255,255,255,255))
	          主角动画:置颜色(ARGB(255,255,255,255))
		    游戏进度=0
	     end
	end
	
	if(血<=0)then
	     主角坐标x=400
	     主角坐标y=400
	     for n=1,敌人数量1 do
	        敌人1[n].x=引擎:取随机整数(50,750)
              敌人1[n].y=-50
		end
	     
      else
	   if(游戏进度<51)then
	
	         for n=1,敌人数量1 do
	               if(敌人1[n].y>580)or(敌人1[n].状态=="死")then
	                     敌人1[n].x=引擎:取随机整数(50,750)
                           敌人1[n].y=-50
	                     敌人1[n].精灵:置颜色(ARGB(255,255,255,255))
	                     敌人1[n].状态="活"
	                     敌人1[n].血=3
	                 else
	                     敌人1[n].y=敌人1[n].y+1
				   if(敌人1[n].y>300)then
				          敌人1[n].y=敌人1[n].y+2
				        if(敌人1[n].x<主角坐标x)then
				                敌人1[n].x=敌人1[n].x+2
				          else
				                敌人1[n].x=敌人1[n].x-2
				           end
				     end
	                     敌人1[n].精灵:显示(敌人1[n].x,敌人1[n].y)
	                     敌人1[n].包围盒:置位置(敌人1[n].x-25,敌人1[n].y-25)
	                      if(引擎:包围盒碰撞检测(敌人1[n].包围盒,主角包围盒))and(血>0)then
	                          血=血-0.1
	                       end
	                       if(敌人1[n].包围盒:检测_点(子弹坐标x,子弹坐标y))then
	                             子弹坐标x=主角坐标x+引擎:取随机整数(-25,25)
	                             子弹坐标y=主角坐标y-50
	                             敌人1[n].血=敌人1[n].血-1
	                             if(敌人1[n].血<0)then
	                                   敌人1[n].状态="死"
	                                   游戏进度=游戏进度+1
	                                   敌人1[n].精灵:置颜色(ARGB(0,0,0,0))
	                             end
	                      end
	                 end
	           end
           end
	     
	     if(游戏进度>50)and(游戏进度<101)then
	     
	        for n=1,敌人数量2 do
	               if(敌人2[n].y>580)or(敌人2[n].状态=="死")then
	                     敌人2[n].x=引擎:取随机整数(50,750)
                           敌人2[n].y=-50
	                     敌人2[n].精灵:置颜色(ARGB(255,255,255,255))
	                     敌人2[n].状态="活"
	                     敌人2[n].血=6
	                 else
	                     敌人2[n].y=敌人2[n].y+1
				   if(敌人2[n].y==200)then
				          敌人2[n].子弹x=敌人2[n].x
				          敌人2[n].子弹y=敌人2[n].y+50
				    end
				     if(敌人2[n].y>200)then
				           敌人2[n].子弹:显示(敌人2[n].子弹x,敌人2[n].子弹y)
					     if(敌人2[n].子弹y>600)then
					           敌人2[n].子弹x=敌人2[n].x
				                 敌人2[n].子弹y=敌人2[n].y+50
						else
						     敌人2[n].子弹y=敌人2[n].子弹y+2
						end
					     if(敌人2[n].子弹x<主角坐标x)then
					          敌人2[n].子弹x=敌人2[n].子弹x+1
						else
						      敌人2[n].子弹x=敌人2[n].子弹x-1
					     end
					     if(主角包围盒:检测_点(敌人2[n].子弹x,敌人2[n].子弹y))and(血>0)then
					         血=血-5
						   敌人2[n].子弹x=敌人2[n].x
				               敌人2[n].子弹y=敌人2[n].y+50
					     end
					     
				     end
	                     敌人2[n].精灵:显示(敌人2[n].x,敌人2[n].y)
	                     敌人2[n].包围盒:置位置(敌人2[n].x-25,敌人2[n].y-25)
	                      if(引擎:包围盒碰撞检测(敌人2[n].包围盒,主角包围盒))and(血>0)then
	                          血=血-2
	                       end
	                       if(敌人2[n].包围盒:检测_点(子弹坐标x,子弹坐标y))then
	                             子弹坐标x=主角坐标x+引擎:取随机整数(-25,25)
	                             子弹坐标y=主角坐标y-50
	                             敌人2[n].血=敌人2[n].血-1
	                             if(敌人2[n].血<0)then
	                                   敌人2[n].状态="死"
	                                   游戏进度=游戏进度+3
	                                   敌人2[n].精灵:置颜色(ARGB(0,0,0,0))
	                             end
	                      end
	                 end
	           end
	     end
	     
	     	     if(游戏进度>100)and(游戏进度<151)then
	     
	        for n=1,敌人数量3 do
	               if(敌人3[n].状态=="死")then
	                     敌人3[n].x=引擎:取随机整数(100,700)
                           敌人3[n].y=-100
	                     敌人3[n].精灵:置颜色(ARGB(255,255,255,255))
	                     敌人3[n].状态="活"
	                     敌人3[n].血=20
	                 else
	                     敌人3[n].y=敌人3[n].y+1
				   if(敌人3[n].y<200)then
				           敌人3[n].y=敌人3[n].y+1
				          敌人3[n].子弹x=敌人3[n].x
				          敌人3[n].子弹y=敌人3[n].y+50
				    else
				             敌人3[n].y=敌人3[n].y-1
				           敌人3[n].子弹:显示_高级(敌人3[n].子弹x,敌人3[n].子弹y,0,3,3)
					     敌人3[n].子弹包围盒:置位置(敌人3[n].子弹x-40,敌人3[n].子弹y-40)
					     if(敌人3[n].子弹y>600)then
					           敌人3[n].子弹x=敌人3[n].x
				                 敌人3[n].子弹y=敌人3[n].y+50
						else
						     敌人3[n].子弹y=敌人3[n].子弹y+2
						end
					     if(敌人3[n].子弹x<主角坐标x)then
					          敌人3[n].子弹x=敌人3[n].子弹x+1
						else
						      敌人3[n].子弹x=敌人3[n].子弹x-1
					     end
					     if(引擎:包围盒碰撞检测(敌人3[n].子弹包围盒,主角包围盒))and(血>0)then
					         血=血-10
						   敌人3[n].子弹x=敌人3[n].x
				               敌人3[n].子弹y=敌人3[n].y+50
					     end
					     
				     end
	                     敌人3[n].精灵:显示(敌人3[n].x,敌人3[n].y)
	                     敌人3[n].包围盒:置位置(敌人3[n].x-75,敌人3[n].y-75)
	                      if(引擎:包围盒碰撞检测(敌人3[n].包围盒,主角包围盒))and(血>0)then
	                          血=血-4
	                       end
	                       if(敌人3[n].包围盒:检测_点(子弹坐标x,子弹坐标y))then
	                             子弹坐标x=主角坐标x+引擎:取随机整数(-25,25)
	                             子弹坐标y=主角坐标y-50
	                             敌人3[n].血=敌人3[n].血-1
	                             if(敌人3[n].血<0)then
	                                   敌人3[n].状态="死"
	                                   游戏进度=游戏进度+5
	                                   敌人3[n].精灵:置颜色(ARGB(0,0,0,0))
	                             end
	                      end
	                 end
	           end
	     end
	     
	     if(游戏进度>150)and(游戏进度<200)then
	          大王动画1:显示_高级(大王x,大王y,0,5,5)
		    if(大王x<400)then
		         大王x=大王x+1
		     else
		          大王血2:显示_高级(300,40,0,2,1)
		          大王血1:显示_高级(300,40,0,大王血/250,1)
		          大王包围盒:置位置(275,125)
		          小王动画1:显示(150,250)
			    小王包围盒1:置位置(118,218)
			    if(小王1状态=="活")then
			         小王子弹1:显示(小王子弹1x,小王子弹1y)
				   if(小王子弹1x>0)and(小王子弹1x<800)and(小王子弹1y<600)then
				        小王子弹1y=小王子弹1y+3
					  if(小王子弹1x>主角坐标x)then
					         小王子弹1x=小王子弹1x-2
					  else
					          小王子弹1x=小王子弹1x+2
					  end
				   else
				         小王子弹1x=150
				         小王子弹1y=282
				   end
				   if(主角包围盒:检测_点(小王子弹1x,小王子弹1y))then
				         血=血-20
					   小王子弹1x=150
				         小王子弹1y=282
				   end
			    end
			    if(小王1状态=="活")and(小王包围盒1:检测_点(子弹坐标x,子弹坐标y))then
			          小王血1=小王血1-1
				    子弹坐标x=主角坐标x+引擎:取随机整数(-25,25)
	                      子弹坐标y=主角坐标y-50
			     end
			     if(小王血1<0)and(小王1状态=="活")then
			          小王1状态="死"
			          小王动画1:置颜色(ARGB(0,0,0,0))
				    游戏进度=游戏进度+10
			     end
			    
		          小王动画2:显示(650,250)
			    小王包围盒2:置位置(618,218)
			      if(小王2状态=="活")then
			         小王子弹2:显示(小王子弹2x,小王子弹2y)
				   if(小王子弹2x>0)and(小王子弹2x<800)and(小王子弹2y<600)then
				        小王子弹2y=小王子弹2y+3
					  if(小王子弹2x>主角坐标x)then
					         小王子弹2x=小王子弹2x-2
					  else
					          小王子弹2x=小王子弹2x+2
					  end
				   else
				         小王子弹2x=650
				         小王子弹2y=282
				   end
				   if(主角包围盒:检测_点(小王子弹2x,小王子弹2y))then
				         血=血-20
					   小王子弹2x=150
				         小王子弹2y=282
				   end
			     end	   
			     
			     if(小王2状态=="活")and(小王包围盒2:检测_点(子弹坐标x,子弹坐标y))then
			          小王血2=小王血2-1
				    子弹坐标x=主角坐标x+引擎:取随机整数(-25,25)
	                      子弹坐标y=主角坐标y-50				
			     end
			     if(小王血2<=0)and(小王2状态=="活")then
			          小王2状态="死"
			          小王动画2:置颜色(ARGB(0,0,0,0))
				    游戏进度=游戏进度+10
			      end
			    
		          if(小王血1<=0)and(小王血2<=0)then
			            大王子弹:显示_高级(大王子弹x,大王子弹y,0,4,4)
					大王子弹包围盒:置位置(大王子弹x-50,大王子弹y-50)
				   if(大王子弹x>0)and(大王子弹x<800)and(大王子弹y<600)then
				        大王子弹y=大王子弹y+4
					  if(大王子弹x>主角坐标x)then
					         大王子弹x=大王子弹x-3
					  else
					          大王子弹x=大王子弹x+3
					  end
				   else
				         大王子弹x=400
				         大王子弹y=200
				   end
				   if(引擎:包围盒碰撞检测(大王子弹包围盒,主角包围盒))then
				         血=血-25
					   大王子弹x=400
				         大王子弹y=200
				    end
				     if(引擎:包围盒碰撞检测(大王包围盒,主角包围盒))then
				         血=血-50
				    end
		               if(大王包围盒:检测_点(子弹坐标x,子弹坐标y))then
		                    大王血=大王血-1
			              子弹坐标x=主角坐标x+引擎:取随机整数(-25,25)
	                          子弹坐标y=主角坐标y-50
			               if(大王血<0)then
			                     游戏进度=游戏进度+50
			       	       
			                end
		                  end
		             
		            end
	           end
	     end
	     if(游戏进度>200)then
	         文字:显示(275,300,"恭喜通关！！！")
	     end
	end
	
	if(血>0)then
	      子弹精灵1:显示(子弹坐标x,子弹坐标y)
	      if(子弹坐标y<0)then
	          子弹坐标x=主角坐标x+引擎:取随机整数(-25,25)
	          子弹坐标y=主角坐标y-50
	     else
	          子弹坐标y=子弹坐标y-15
	     end
	end
	
	if(进度==3000)then
	     大招精灵:显示(16,16)
	     文字:显示(0,40,"大招就绪")
	     文字:显示(0,80,"按空格释放")
	     if(引擎:取按键事件(键_空格))then
	          for n=1,敌人数量1 do
	               敌人1[n].状态="死"
		    end
		         for n=1,敌人数量2 do
		               敌人2[n].状态="死"
		          end 
			     for n=1,敌人数量3 do
		              敌人3[n].状态="死"
			     end
	               if(血<50)then
	                     血=75
	                end
	           进度=0
	      end
	end
	

	
	
	
	文字:显示(700,0,游戏进度*10)

	渲染结束()
	return false
	end









--===============================================================================
-- ■ 网络数据处理()
--===============================================================================
function 网络数据处理 (命令,参数1,参数2,附加)


end




--=============================================================================--
-- ■ 网络连接断开()
--=============================================================================--
function 网络连接断开 ()


end



--===============================================================================
-- ■ 屏幕获得焦点()
--===============================================================================
function 屏幕获得焦点 ()


	return false
end



--===============================================================================
-- ■ 屏幕失去焦点()
--===============================================================================
function 屏幕失去焦点 ()


	return false
end



--===============================================================================
-- ■ 屏幕关闭()
--===============================================================================
function 屏幕关闭 ()

	
	
	return true
end



--===============================================================================
-- ■ 渲染区保护()
--===============================================================================
function 渲染区保护 ()


	return false
end








